home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
colors.arc
/
MAKECOLR.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-12-09
|
4KB
|
132 lines
type
mask = array[0..6] of byte ;
xmit = array[0..6] of real ;
chlo = array[0..4] of byte ;
const
_6845_Index = $3D4 ;
_6845_Data = $3D5 ;
ModeControl = $3D8 ;
red : mask = ($00,$40,$04,$C0,$0C,$44,$CC) ;
green: mask = ($00,$20,$02,$A0,$0A,$22,$AA) ;
blue : mask = ($00,$10,$01,$90,$09,$11,$99) ;
BC : xmit = (1.0,0.75,0.50,0.25,0.0,0.0,0.0) ;
FC : xmit = (0.0,0.25,0.50,0.75,1.0,0.0,0.0) ;
BV : xmit = (0.0,0.65,0.0,1.0,0.0,0.65,1.0) ;
FV : xmit = (0.0,0.0,0.65,0.0,1.0,0.65,1.0) ;
chctr: chlo = (32,176,177,178,219) ;
MaxC = 6 ;
var
screen : array[0..15999,0..1] of byte absolute $B000:$8000 ;
hue : array[0..MaxC,0..MaxC,0..MaxC] of byte ;
inten : array[0..MaxC,0..MaxC,0..MaxC] of byte ;
colorfile : file of byte ;
function bbght(n:integer):boolean ;
begin
if (n=3) or (n=6) then bbght := true else bbght := false ;
end ;
function bdim(n:integer):boolean ;
begin
if (n=1) or (n=5) then bdim := true else bdim := false ;
end ;
function fbght(n:integer):boolean ;
begin
if (n=4) or (n=6) then fbght := true else fbght := false ;
end ;
function fdim(n:integer):boolean ;
begin
if (n=2) or (n=5) then fdim := true else fdim := false ;
end ;
function exclude (r,g,b:integer) : boolean ;
var
ex : boolean ;
begin
ex := false ;
if bbght(r) and (bdim(g) or bdim(b)) then ex := true ;
if fbght(r) and (fdim(g) or fdim(b)) then ex := true ;
if bbght(g) and (bdim(r) or bdim(b)) then ex := true ;
if fbght(g) and (fdim(r) or fdim(b)) then ex := true ;
if bbght(b) and (bdim(g) or bdim(r)) then ex := true ;
if fbght(b) and (fdim(g) or fdim(r)) then ex := true ;
exclude := ex ;
end ;
procedure noblink ;
begin
port[$3D8] := 9 ;
end ;
var
r,g,b,i,ir,ig,ib,rm,gm,bm,x : integer ;
ri,gi,bi,delta : real ;
rdelta,gdelta,bdelta : real ;
ch,c : byte ;
begin
noblink ;
assign(colorfile,'COLOR.DAT');
rewrite(colorfile) ;
for r := 0 to MaxC do
begin
for g := 0 to MaxC do
begin
for b := 0 to MaxC do
begin
TextColor(15) ;
write('Color ',r,',',g,',',b,' = ');
ri := r / MaxC ;
bi := b / MaxC ;
gi := g / MaxC ;
rm := 0 ;
bm := 0 ;
gm := 0 ;
ch := 0 ;
delta := 1e30 ;
for i := 0 to 4 do
begin
for ir := 0 to 6 do
begin
for ig := 0 to 6 do
begin
for ib := 0 to 6 do
if not exclude(ir,ig,ib) then
begin
rdelta := abs(BC[i]*BV[ir]+FC[i]*FV[ir]-ri) ;
gdelta := abs(BC[i]*BV[ig]+FC[i]*FV[ig]-gi) ;
bdelta := abs(BC[i]*BV[ib]+FC[i]*FV[ib]-bi) ;
if (rdelta+gdelta+bdelta) < delta then
begin
rm := ir ;
bm := ib ;
gm := ig ;
ch := i ;
delta := rdelta+gdelta+bdelta ;
end ;
end ;
end ;
end ;
end ;
hue[r,g,b] := red[rm] or blue[bm] or green[gm] ;
inten[r,g,b] := chctr[ch] ;
Write(colorfile,hue[r,g,b],inten[r,g,b]) ;
TextColor(hue[r,g,b] mod 16) ;
if hue[r,g,b]>127 then TextColor(hue[r,g,b] mod 16+16) ;
TextBackground((hue[r,g,b] div 16) mod 8) ;
for x := 1 to 40 do Write(chr(inten[r,g,b])) ;
TextColor(15) ;
TextBackground(0) ;
Writeln(hue[r,g,b],':',inten[r,g,b]) ;
end ;
end ;
end ;
Close(ColorFile) ;
end .